﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;
using Model;
using HRP.Utilidades;

namespace HRP.Private.Adiantamentos
{
    public partial class Criar : System.Web.UI.Page
    {
        public string moeda
        {
            get
            {
                if (Session["EmpresaActual"] != null)
                {
                    hrp_empresas empresaActual = (hrp_empresas)Session["EmpresaActual"];
                    return utilidades.ObterMoedaEmpresa(empresaActual.id);
                }
                Response.Redirect("/private/logout.aspx");
                return string.Empty;
            }
        }
        public string idField;
        private string _NomeFuncionario
        {
            get
            {
                if (ViewState["NomeFuncionario"] != null)
                {
                    return (string)ViewState["NomeFuncionario"];
                }
                return string.Empty;
            }
            set
            {
                ViewState["NomeFuncionario"] = value;
            }
        }
        public string NomeFuncionario
        {
            get
            {
                return _NomeFuncionario;
            }
            set
            {
                _NomeFuncionario = value;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["funcId"] != null && Session["userid"] != null && Session["EmpresaActual"] != null && Session["idclient"] != null)
            {
                int funcId = 0;
                Int32.TryParse(Request.QueryString["funcId"], out funcId);
                if (funcId > 0)
                {
                    idField = "\n$(\"#" + dataInicioTB.ClientID + "\"" + @").datepicker({ 
                                    dateFormat: 'yy-mm-dd',
                                    monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
                                    dayNamesMin: ['D', 'S', 'T', 'Q', 'Q', 'S', 'S'],
                                    dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab']});";

                    criarNovoAdiantamentoBT.Click += criarNovoAdiantamentoBT_Click;
                    if (!Page.IsPostBack)
                    {
                        carregarTipoPagamento();
                        carregarFuncionario(funcId);
                    }

                    formPanel.Visible = true;
                    msgPanel.Visible = false;
                    erroPanel.Visible = false;
                }
                else
                {
                    formPanel.Visible = false;
                    msgPanel.Visible = false;
                    erroPanel.Visible = true;
                }
            }
            else
            {
                formPanel.Visible = false;
                msgPanel.Visible = false;
                erroPanel.Visible = true;
            }
        }       

        void carregarTipoPagamento()
        {
            pagamentosList.DataSource = Funcionario_BLL.Instance.obterTiposAdiantamento();
            pagamentosList.DataBind();
        }

        protected void criarNovoAdiantamentoBT_Click(object sender, EventArgs e)
        {
            try
            {
                int funcId = 0;
                Int32.TryParse(Request.QueryString["funcId"], out funcId);
                if (funcId > 0)
                {
                    var dadosCLiente = Salario_BLL.Instance.salarioFuncionario(funcId);
                    //check salario superior ao adiantamento 
                    Decimal totalSalario = dadosCLiente.salario + dadosCLiente.abono + dadosCLiente.abono_familia + dadosCLiente.ajudas + dadosCLiente.chefia + dadosCLiente.outros_subs + dadosCLiente.sub_alimentacao + dadosCLiente.sub_assiduidade + dadosCLiente.sub_compensacao + dadosCLiente.sub_contagio + dadosCLiente.sub_desempenho + dadosCLiente.sub_exposicao + dadosCLiente.sub_produtividade + dadosCLiente.sub_transporte + dadosCLiente.sub_turno + dadosCLiente.sub10 + dadosCLiente.tempo_servico;
                    if (Convert.ToDecimal(valorTB.Text) > totalSalario)
                    {
                        Label1.Text = "Valor Adiantamento superior a totalidade de salário.";
                        Label1.Visible = true;
                        formPanel.Visible = false;
                        msgPanel.Visible = true;
                        erroPanel.Visible = false;
                        return;
                    }

                    //check data de adiantamento igual ou superior ao mes currente
                    if (Convert.ToDateTime(dataInicioTB.Text).Month < DateTime.Now.Month)
                    {

                        Label1.Text = "Mes a que se refere o adiantamento tem que ser igual ou superior ao mes actual.";
                        Label1.Visible = true;
                        formPanel.Visible = false;
                        msgPanel.Visible = true;
                        erroPanel.Visible = false;
                        return;
                    }

                    int mes_seleccionado = Convert.ToDateTime(dataInicioTB.Text).Month;
                    int ano_seleccionado = Convert.ToDateTime(dataInicioTB.Text).Year;

                    var result = Funcionario_BLL.Instance.registarAdiantamento(Session["userid"].ToString(), Request.UserHostAddress,
                        funcId, DateTime.Now, observacaoTB.Text, mes_seleccionado, ano_seleccionado,
                        Convert.ToDecimal(valorTB.Text), true, pagamentosList.SelectedItem.ToString());
                    Label1.Visible = true;
                    Label1.Text = "Adiantamento criado com Sucesso";
                    formPanel.Visible = false;
                    msgPanel.Visible = true;
                    erroPanel.Visible = false;
                }

            }
            catch (Exception)
            {
                formPanel.Visible = false;
                msgPanel.Visible = false;
                erroPanel.Visible = true;
            }
        }

        void carregarFuncionario(int funcId)
        {
            var funcionario = Funcionario_BLL.Instance.ObterFuncionarioPorId1(funcId);
            NomeFuncionario = funcionario.nome;
        }



    }
}